#ifndef _SKYBOX_H
#define _SKYBOX_H

#include <fstream>
#include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>
#include <GL/glew.h>
#include "Texture.h"
#include "Vector3.h"
#include "IDrawable.h"

namespace glow
{
  class SHARED SkyBox : public IDrawable
  {
  public:

    /**
     *  Default constructor of the Skybox
     **/
    SkyBox();

    /**
     *  Destructor of the Skybox
     **/
    ~SkyBox();

    /**
     *  Load the 6 screen of the skyBox
	 *\param front the name of the image's file front of the skybox
	 *\param back the name of the image's file bask of the skybox
	 *\param down the name of the image's file down of the skybox
	 *\param up the name of the image's file up of the skybox
	 *\param left the name of the image's file left of the skybox
	 *\param right the name of the image's file right of the skybox
     **/
    void load(std::string front, std::string back, std::string down, std::string up, std::string left, std::string right);

    /**
     *  Set position of the Skybox
	 *\param VSB the position of the skybox
     **/
    void setPosition(const Vector3d &VSB);

    /**
     *  Draw the Skybox in the 3d-space
     **/
    virtual void draw() const;

  private:

    /**
     *  Table of textures of the Skybox
     **/
    Texture ** TexSB;

    /**
     *  Table of folder's names of the textures
     **/
    std::string CheminTex[6];


    GLuint cube_map_texture_ID;

    /**
     *  Position of the Skybox
     **/
    Vector3d _pos;
  };
}

#endif
